home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWGadgts / Sources / FWRadioB.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  7.5 KB  |  258 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWRadioB.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWRADIOB_H
  13. #include "FWRadioB.h"
  14. #endif
  15.  
  16. #ifndef FWFRAME_H
  17. #include "FWFrame.h"
  18. #endif
  19.  
  20. #ifndef FWPART_H
  21. #include "FWPart.h"
  22. #endif
  23.  
  24. // ----- OS Layer -----
  25.  
  26. #ifndef FWEVENT_H
  27. #include "FWEvent.h"
  28. #endif
  29.  
  30. #ifndef FWRRCSHP_H
  31. #include "FWRRcShp.h"
  32. #endif
  33.  
  34. #ifndef FWODGEOM_H
  35. #include "FWODGeom.h"
  36. #endif
  37.  
  38. // ----- OpenDoc Includes -----
  39.  
  40. #ifndef SOM_ODSession_xh
  41. #include <ODSessn.xh>
  42. #endif
  43.  
  44. #ifndef SOM_ODFacet_xh
  45. #include <Facet.xh>
  46. #endif
  47.  
  48. #ifndef SOM_ODTransform_xh
  49. #include <Trnsform.xh>
  50. #endif
  51.  
  52. //========================================================================================
  53. // Runtime Informations
  54. //========================================================================================
  55.  
  56. #if FW_LIB_EXPORT_PRAGMAS
  57. #pragma lib_export on
  58. #endif
  59.  
  60. #ifdef FW_BUILD_MAC
  61. #pragma segment fwgadgts
  62. #endif
  63.  
  64. FW_DEFINE_CLASS_M1(FW_CRadioButton, FW_CButton)
  65.  
  66. //========================================================================================
  67. // CLASS FW_CRadioButton
  68. //========================================================================================
  69.  
  70. //----------------------------------------------------------------------------------------
  71. // FW_CRadioButton::FW_CRadioButton
  72. //----------------------------------------------------------------------------------------
  73.  
  74. FW_CRadioButton::FW_CRadioButton(Environment* ev, 
  75.                                  FW_CView* container, ODID id,
  76.                                  const FW_CRect& bounds,
  77.                                  const FW_CString& label) :
  78.     FW_CButton(ev, container, id, bounds),
  79.     fButtonHelper(NULL)
  80. {
  81. #ifdef FW_BUILD_MAC
  82.     fButtonHelper = new FW_CPrivMacRadioButtonHelper
  83.                                 (ev, FW_TYPEID_FROM_TYPE(FW_CPrivMacRadioButtonHelper), this);
  84. #endif
  85.  
  86. #ifdef FW_BUILD_WIN
  87.     fButtonHelper = new FW_CPrivWinRadioButtonHelper
  88.                                 (ev, FW_TYPEID_FROM_TYPE(FW_CPrivWinRadioButtonHelper), this);
  89. #endif
  90.  
  91.     fButtonHelper->SetText(label);
  92. }
  93.  
  94. //----------------------------------------------------------------------------------------
  95. // FW_CRadioButton::~FW_CRadioButton
  96. //----------------------------------------------------------------------------------------
  97.  
  98. FW_CRadioButton::~FW_CRadioButton()
  99. {
  100.     delete fButtonHelper;
  101. }
  102.  
  103. //----------------------------------------------------------------------------------------
  104. // FW_CRadioButton::LocationChanged
  105. //----------------------------------------------------------------------------------------
  106.  
  107. void FW_CRadioButton::LocationChanged(Environment* ev,
  108.                                          const FW_CPoint &oldLocation)
  109. {
  110. FW_UNUSED(oldLocation);
  111.  
  112. #ifdef FW_BUILD_WIN
  113.     FW_CViewContext fc(ev, this, GetFrame(ev)->GetActiveFacet(ev));
  114.     
  115.     FW_SPlatformPoint wndLocation = fc.ContentToCanvas(GetLocation(ev));
  116.     FW_CPoint buttonSize = GetSize(ev);
  117.     FW_SPlatformPoint wndSize = fc.ContentToCanvas(buttonSize.x, buttonSize.y);
  118.     fButtonHelper->Move(wndLocation, wndSize);
  119. #endif
  120. }
  121.  
  122. //----------------------------------------------------------------------------------------
  123. // FW_CRadioButton::SizeChanged
  124. //----------------------------------------------------------------------------------------
  125.  
  126. void FW_CRadioButton::SizeChanged(Environment* ev, const FW_CPoint &oldSize)
  127. {
  128. FW_UNUSED(oldSize);
  129.  
  130. #ifdef FW_BUILD_WIN
  131.     FW_CViewContext fc(ev, this, GetFrame(ev)->GetActiveFacet(ev));
  132.     
  133.     FW_SPlatformPoint wndLocation = fc.ContentToCanvas(GetLocation(ev));
  134.     FW_CPoint buttonSize = GetSize(ev);
  135.     FW_SPlatformPoint wndSize = fc.ContentToCanvas(buttonSize.x, buttonSize.y);
  136.     fButtonHelper->Move(wndLocation, wndSize);
  137. #endif
  138. }
  139.  
  140. //----------------------------------------------------------------------------------------
  141. // FW_CRadioButton::Draw
  142. //----------------------------------------------------------------------------------------
  143.  
  144. void FW_CRadioButton::Draw(Environment* ev, ODFacet* facet, ODShape* invalidShape)
  145. {
  146. #ifdef FW_BUILD_MAC
  147.     FW_CViewContext gc(ev, this, facet, invalidShape);
  148.  
  149.     FW_SPlatformPoint qdPoint = gc.LogicalToDevice(FW_kZeroPoint);
  150.     FW_SPlatformPoint qdSize;
  151.     GetSize(ev).AsPlatformPoint(qdSize);
  152.     ODPlatformWindow window = facet->GetWindow(ev)->GetPlatformWindow(ev);
  153.     fButtonHelper->Draw(window, qdPoint, qdSize);
  154. #endif
  155.  
  156. #ifdef FW_BUILD_WIN
  157.     // Windows handles updating controls automatically
  158. #endif
  159. }
  160.  
  161. //----------------------------------------------------------------------------------------
  162. // FW_CRadioButton::DoMouseDown
  163. //----------------------------------------------------------------------------------------
  164.  
  165. FW_Boolean FW_CRadioButton::DoMouseDown(Environment* ev, const FW_CMouseEvent& theMouseEvent)
  166. {
  167. // This code is duplicated for in each control class, think about moving it to the
  168. // control helpers, and maybe making the owner of helpers be gadgets. [AMB]
  169.  
  170. #ifdef FW_BUILD_MAC
  171.     ODFacet* odFacet = theMouseEvent.GetFacet(ev);
  172.     FW_CViewContext gc(ev, this, odFacet);
  173.     
  174.     FW_CPoint canvasWhere = theMouseEvent.GetMousePosition(ev, FW_CMouseEvent::kWindow);
  175.     
  176.     {
  177.         // Take into account the origin offset for pattern alignment. [AMB]
  178.         FW_CAcquiredODTransform aqTransform(odFacet->CreateTransform(ev));
  179.  
  180.         ODPlatformCanvas plfmCanvas = gc.GetPlatformCanvas();
  181.         FW_CPoint offset(
  182.             FW_IntToFixed(plfmCanvas->portRect.left),
  183.             FW_IntToFixed(plfmCanvas->portRect.top));
  184.         
  185.         ODPoint odOffset = offset;
  186.         aqTransform->MoveBy(ev, &odOffset);
  187.         
  188.         canvasWhere.Transform(ev, aqTransform);
  189.     }
  190.     
  191.     FW_SPlatformPoint qdControlPosition = gc.LogicalToDevice(FW_kZeroPoint);
  192.     FW_SPlatformPoint qdWhere;
  193.     canvasWhere.AsPlatformPoint(qdWhere);
  194.     ODPlatformWindow window = odFacet->GetWindow(ev)->GetPlatformWindow(ev);    
  195.     
  196.     FW_SPlatformPoint qdSize;
  197.     GetSize(ev).AsPlatformPoint(qdSize);
  198.  
  199.     fButtonHelper->MouseDown(window, qdWhere, qdControlPosition, qdSize);
  200.     return TRUE;
  201. #endif
  202.  
  203. #ifdef FW_BUILD_WIN
  204.     // Windows handles mouse events automatically
  205.     return FALSE;
  206. #endif
  207. }
  208.  
  209. //----------------------------------------------------------------------------------------
  210. // FW_CRadioButton::SetState
  211. //----------------------------------------------------------------------------------------
  212.  
  213. void FW_CRadioButton::SetState(Environment* ev, FW_CViewContext& gc, FW_Boolean on)
  214. {
  215. #ifdef FW_BUILD_MAC
  216.     ODPlatformWindow window = gc.GetFacet()->GetWindow(ev)->GetPlatformWindow(ev);
  217.     
  218.     FW_SPlatformPoint qdControlPosition = gc.LogicalToDevice(FW_kZeroPoint);
  219.     
  220.     FW_SPlatformPoint qdSize;
  221.     GetSize(ev).AsPlatformPoint(qdSize);
  222.  
  223.     fButtonHelper->SetValue(window, qdControlPosition, qdSize, on ? 1 : 0);
  224. #endif
  225.  
  226. #ifdef FW_BUILD_WIN
  227.     SetState(ev, on);
  228. #endif
  229. }
  230.  
  231. //----------------------------------------------------------------------------------------
  232. // FW_CRadioButton::SetState
  233. //----------------------------------------------------------------------------------------
  234.  
  235. void FW_CRadioButton::SetState(Environment* ev, FW_Boolean on)
  236. {
  237. #ifdef FW_BUILD_MAC
  238.     fButtonHelper->SetValue(on ? 1 : 0);
  239. #endif
  240.  
  241. #ifdef FW_BUILD_WIN
  242.     fButtonHelper->SetState(on ? 1 : 0);
  243. #endif
  244. }
  245.  
  246. //----------------------------------------------------------------------------------------
  247. // FW_CRadioButton::ButtonPressed
  248. //----------------------------------------------------------------------------------------
  249.  
  250. void FW_CRadioButton::ButtonPressed(Environment* ev)
  251. {
  252.     // ----- Notify interested parties of that the button was pressed
  253.     
  254.     FW_CButtonPressedNotification notification(FW_CInterest(this, GetButtonPressedNotificationToken(ev)),
  255.                                                GetIdentifier(ev), GetState(ev));
  256.     Notify(notification);
  257. }
  258.